
package com.renyi.util;

import java.util.List;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;


 
public class JSONUtils
{
 
	    /**
	     * 将java类型的对象转换为JSON格式的字符串
	     * @param object java类型的对象
	     * @return JSON格式的字符串
	     */
	    public static <T> String toJSON(T object) {
	        return JSON.toJSONString(object);
	    }

	    /**
	     * 将JSON格式的字符串转换为java类型的对象或者java数组类型的对象，不包括java集合类型
	     * @param json JSON格式的字符串
	     * @param clz java类型或者java数组类型，不包括java集合类型
	     * @return java类型的对象或者java数组类型的对象，不包括java集合类型的对象
	     */
	    public static <T> T fromJson(String json, Class<T> clz) {
	        return JSON.parseObject(json, clz);
	    }

	    /**
	     * 将JSON格式的字符串转换为List<T>类型的对象
	     * @param json JSON格式的字符串
	     * @param clz 指定泛型集合里面的T类型
	     * @return List<T>类型的对象
	     */
	    public static <T> List<T> fromJsonToList(String json, Class<T> clz) {
	        return JSON.parseArray(json, clz);
	    }

	    /**
	     * 将JSON格式的字符串转换成任意Java类型的对象
	     * @param json JSON格式的字符串
	     * @param type 任意Java类型
	     * @return 任意Java类型的对象
	     */
	    public static <T> T fromJson(String json, TypeReference<T> type) {
	        return JSON.parseObject(json, type);
	    }
	    
	    /**
	     * 将JSON格式的字符串转换为java类型的对象或者java数组类型的对象，不包括java集合类型
	     * @param json JSON格式的字符串
	     * @param clz java类型或者java数组类型，不包括java集合类型
	     * @return java类型的对象或者java数组类型的对象，不包括java集合类型的对象
	     */
	    public static <T> T fromJson(String json, TypeToken<T> token) {
	    	if ("".equals(json) || json.equals(null) )
			{
				return null;
			}
			GsonBuilder builder = new GsonBuilder();
			/*builder.registerTypeAdapter(Map.class, new HashMapDeserializer());*/
			Gson gson = builder.create();
			try
			{
				return gson.fromJson(json, token.getType());
			}
			catch (Exception ex)
			{
				return null;
			}
	    }

	}